package controllers.BusinessDelegate;

import java.util.List;

import Persistencia.DAOGenericoJPA;
import Persistencia.DAO.DAOCampeonato;
import Persistencia.DAO.DAOCliente;
import Persistencia.DAO.DAOEquipe;
import Persistencia.DAO.DAOFuncionario;
import Persistencia.Exception.DAOException;
import models.Campeonato;
import models.Cliente;
import models.Equipe;
import models.Funcionario;

public class BusinessDelagate {
	
	private DAOCliente daoCliente;
	private DAOFuncionario daoFuncionario;
	private DAOCampeonato daoCampeonato;
	private DAOEquipe daoEquipe;
	private static BusinessDelagate instance;
	public Cliente clienteAtual;
	public Funcionario funcionarioAtual;

	   private BusinessDelagate() {

	   }

	   public static BusinessDelagate getInstance() {
	      if (instance == null)
	         instance = new BusinessDelagate();
	      return instance;
	   }
	   
	   public void cadastrarNovoCliente(Cliente c) throws DAOException{
		   daoCliente = new DAOCliente();
		   daoCliente.addEntity(c);
	   }
	   
	   public List<Cliente> getAllCliente() throws DAOException{
		   daoCliente = new DAOCliente();
		   return daoCliente.findAll();
	   }

	public Cliente getClienteByCPF(String cpf) throws DAOException {
			daoCliente = new DAOCliente();
			Cliente cliente = new Cliente();
			List<Cliente> cl = daoCliente.findAll();
			for (Cliente c : cl){
				if(c.getCpf().equals(cpf)){
					cliente = c;
					setClienteAtual(cliente);
				}
			}
		return cliente;
	}

	public Cliente getClienteAtual() {
		return clienteAtual;
	}

	public void setClienteAtual(Cliente clienteAtual) {
		this.clienteAtual = clienteAtual;
	}

	public Funcionario getFuncionarioAtual() {
		return funcionarioAtual;
	}

	public void setFuncionarioAtual(Funcionario funcionarioAtual) {
		this.funcionarioAtual = funcionarioAtual;
	}

	public void atualizarCliente(Cliente c) throws DAOException {
		daoCliente = new DAOCliente();
		daoCliente.updateEntity(c);
	}

	public void removerCliente(Cliente c) throws DAOException {
		daoCliente = new DAOCliente();
		daoCliente.removeEntity(c);
	}

	public void cadastrarNovoFuncionario(Funcionario f) throws DAOException {
		daoFuncionario = new DAOFuncionario();
		daoFuncionario.addEntity(f);
		
	}

	public List<Funcionario> getAllFuncionarios() throws DAOException {
		// TODO Auto-generated method stub
		daoFuncionario = new DAOFuncionario();
		List<Funcionario> funcs = daoFuncionario.findAll();
		return funcs;
	}

	public Funcionario getFuncionarioByCPF(String cpf) throws DAOException {
		daoFuncionario = new DAOFuncionario();
		Funcionario f = daoFuncionario.findByCPF(cpf);
		return f;
	}

	public void atualizarFuncionario(Funcionario f) throws DAOException {
		daoFuncionario = new DAOFuncionario();
		daoFuncionario.updateEntity(f);	
	}

	public void removerFuncionario(Funcionario f) throws DAOException {
		daoFuncionario = new DAOFuncionario();
		daoFuncionario.removeEntity(f);	
	}

	public void cadastrarCampeonato(Campeonato camp) throws DAOException {
		daoCampeonato = new DAOCampeonato();
		daoCampeonato.addEntity(camp);
	}

	public void cadastrarEquipe(Equipe eq) throws DAOException {
		daoEquipe = new DAOEquipe();
		daoEquipe.addEntity(eq);
		
	}
}
